package org.mendoza.salud.hvt.model.global;

import org.mendoza.salud.hvt.model.AbstractEntity;

import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Past;
import java.util.Date;

/**
 * Created with IntelliJ IDEA.
 * User: Ricardo
 * Date: 06/11/13
 * Time: 10:53
 * To change this template use File | Settings | File Templates.
 */
@Entity
@NamedQueries(value = {
        @NamedQuery(name = "Persona.All", query = "select p from Persona p"),
        @NamedQuery(name = "Persona.By.fechaDeNacimiento", query = "select p from Persona p where p.fechaDeNacimiento=:fechaDeNacimiento")
})

public class Persona extends AbstractEntity {

    @NotNull
    private String nombres;
    @NotNull
    private String apellidos;
    @NotNull
    @Temporal(TemporalType.DATE)
    @Past
    private Date fechaDeNacimiento;
    @Temporal(TemporalType.DATE)
    @Past
    private Date fechaDeFallecimiento;
    @NotNull
    @OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    private Documento documento;

    @Enumerated
    @NotNull
    private Sexo sexo;

    public Persona() {
    }

    public Persona(String nombres, String apellidos, Date fechaDeNacimiento, Date fechaDeFallecimiento, Documento documento, Sexo sexo) {
        this.nombres = nombres;
        this.apellidos = apellidos;
        this.fechaDeNacimiento = fechaDeNacimiento;
        this.fechaDeFallecimiento = fechaDeFallecimiento;
        this.documento = documento;
        this.sexo = sexo;
    }

    public String getNombres() {
        return nombres;
    }

    public void setNombres(String nombres) {
        this.nombres = nombres;
    }

    public String getApellidos() {
        return apellidos;
    }

    public void setApellidos(String apellidos) {
        this.apellidos = apellidos;
    }

    public Date getFechaDeNacimiento() {
        return fechaDeNacimiento;
    }

    public void setFechaDeNacimiento(Date fechaDeNacimiento) {
        this.fechaDeNacimiento = fechaDeNacimiento;
    }

    public Documento getDocumento() {
        return documento;
    }

    public void setDocumento(Documento documento) {
        this.documento = documento;
    }

    public Sexo getSexo() {
        return sexo;
    }

    public void setSexo(Sexo sexo) {
        this.sexo = sexo;
    }

    public Date getFechaDeFallecimiento() {
        return fechaDeFallecimiento;
    }

    public void setFechaDeFallecimiento(Date fechaDeFallecimiento) {
        this.fechaDeFallecimiento = fechaDeFallecimiento;
    }

    @Override
    public String toString() {
        return "Persona{" +
                "nombres='" + nombres + '\'' +
                ", apellidos='" + apellidos + '\'' +
                ", fechaDeNacimiento=" + fechaDeNacimiento +
                ", fechaDeFallecimiento=" + fechaDeFallecimiento +
                ", documento=" + documento +
                ", sexo=" + sexo +
                '}';
    }

    public enum Sexo {
        FEMENINO, MASCULINO, INDEFINIDO
    }


}
